.scroll-to-stamp {
  position: fixed;
  bottom: 5rem;
  right: 1rem;
  z-index: 1000;
}
@media (min-width: 992px) {
  .scroll-to-stamp {
    opacity: 0.75;
    transition: opacity 0.125s;
  }
  .scroll-to-stamp:hover {
    opacity: 1;
  }
}

.stamp-qr-reader {
  position: relative;
  min-height: 200px;
  min-width: 200px;
}

#stamp-qr-scanner > div:not(.stamp-qr-abs) {
  display: none !important;
}

.stamp-qr-abs {
  position: absolute;
}

.stamp-qr-reader .qr-spinner {
  top: 50%;
  left: 50%;
}

.stamp-qr-reader .crosshair {
  inset: 0;
  width: 100%;
  height: 100%;
}

#stamp-qr-scanner > video {
  aspect-ratio: 1;
  object-fit: cover;
  overflow: hidden;
}

#qr-scanner-poster:not(.d-none) {
  outline: 0.25rem solid #00ff00;
  filter: grayscale(0.7);
  animation: fadeIn 0.25s;
}
@keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
.stamp-qr-states {
  min-height: calc(4.5rem + 0.5rem);
}
.stamp-qr-state {
  line-height: 1.5rem;
  text-overflow: ellipsis;
  overflow: hidden;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
}

/* Default state */
.stamp-qr-reader .qr-spinner,
.stamp-qr-reader .stamp-qr-state {
  display: none;
}
/* Default state */

/* QR reader initiating state */
.stamp-qr-reader.qr-init .crosshair {
  display: none;
}
.stamp-qr-reader.qr-init video {
  opacity: 0;
}
.stamp-qr-reader.qr-init .stamp-qr-state.stamp-qr-waiting {
  display: block;
}
.stamp-qr-reader.qr-init .qr-spinner {
  display: block;
}
/* QR reader initiating state */

/* QR reader scanning state */
.stamp-qr-reader.qr-scanning .stamp-qr-state.stamp-qr-scanning {
  display: block;
}
.stamp-qr-reader.qr-scanning .crosshair {
  color: #ffc107;
}
.stamp-qr-reader.qr-visible .crosshair {
  color: #ec6302;
}
/* QR reader scanning state */

/* QR reader scanning wrong qr state */
.stamp-qr-reader.qr-mistake-code .stamp-qr-state.stamp-qr-mistake-code {
  display: block;
}
.stamp-qr-reader.qr-mistake-rally .stamp-qr-state.stamp-qr-mistake-rally {
  display: block;
}
.stamp-qr-reader.qr-mistake-content .stamp-qr-state.stamp-qr-mistake-content {
  display: block;
}
/* QR reader scanning wrong qr state */

/* QR reader read state */
.stamp-qr-reader.qr-read .crosshair {
  display: none;
}
.stamp-qr-reader.qr-read .stamp-qr-state.stamp-qr-success {
  display: block;
}
/* QR reader read state */
